home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / dpat / dpat01 / ampc / ampc.c < prev    next >
C/C++ Source or Header  |  1992-01-21  |  5KB  |  154 lines

  1. /* Am-Pc v1.1 -- Michel Laliberté, avril 1990 */
  2. #include <stdio.h>
  3. main(argc,argv) 
  4. int argc;
  5. char *argv[];
  6. {
  7.  short conv = 0;
  8.  short lf = 0;
  9.  register char b;
  10.  register char a = 'á';
  11.  register short asc = 0;
  12.  register char c;
  13.  FILE *fp;
  14.  FILE *pf;
  15.  if (argc < 4 || argc > 6) 
  16.  {
  17.  printf("\f");
  18.  printf("                     Am-Pc v1.2  - avril 1990\n\n");
  19.  printf("     Ce programme convertit les fichiers WordPerfect Amiga à accents \n");
  20.  printf("     français en fichiers WordPerfect accentués MS-DOS, et vice-versa.\n");
  21.  printf("     Pour convertir le disque, utiliser CrossDos, MessyDos ou Dos2Dos.\n\n");
  22.  printf(" USAGE:1> ampc  origine  dest.  xx  [asc]  [lf] Place dans le fichier\n");
  23.  printf("                                                \"dest.\" la conversion \n");
  24.  printf("                                                du fichier \"origine\".\n\n");
  25.  printf("     Si xx = pc, le sens de la conversion est: Amiga -> PC.\n");
  26.  printf("     Si xx = am, on prend le sens contraire:   PC -> Amiga.\n\n");
  27.  printf("     Pour les fichiers ASCII autres que WordPerfect, utiliser \"asc\".\n");  
  28.  printf("     Pour convertir les LF en LF + CR ou vice-versa, utiliser\"lf\".\n");  
  29.  printf("     Pour des résultats plus rapides, travailler en RAM:\n");
  30.  printf("     ex.: 1> ampc   ram:n_du_fichier   ram:conv.1   pc\n");
  31.  printf("           CE PROGRAMME EST GRATUIT - REVENTE INTERDITE\n");
  32.  printf("      Michel Laliberté, Montréal - tél.: (514) 274-0288\n\n");
  33.  exit(0);
  34.  }
  35.  if ((argc >4 && argc <7 ) && !strcmp(argv[4],"asc")) asc=1;
  36.       else if (argc >4 && argc <7) {
  37.        printf("USAGE: 1> ampc  origine dest.  xx  [asc] [lf]\n");
  38.            exit(0);
  39.       }
  40.  
  41.  if ((argc >4 && argc <7) && !strcmp(argv[5],"lf")) lf=1;
  42.       else if (argc == 6) {
  43.        printf("USAGE: 1> ampc  origine dest.  xx  [asc] [lf]\n");
  44.            exit(0);
  45.       }
  46.  
  47.       if      (argc >=4 && !strcmp(argv[3],"pc")) conv=1;
  48.       else if (argc >=4 && !strcmp(argv[3],"am")) conv=2;
  49.       else {
  50.        printf("USAGE: 1> ampc  origine dest.  xx  [asc] [lf]\n");
  51.            printf("         \"xx\" doit être \"am\" ou \"pc\".\n\n");
  52.            exit(0);
  53.            }
  54.  
  55.       if((fp=fopen(argv[1],"r")) == NULL) {
  56.         printf("          Impossible d'ouvrir le fichier source...\n");
  57.         exit(0);
  58.       }
  59.  
  60.       if((pf=fopen(argv[2],"w")) == NULL) {
  61.         printf("          Impossible d'ouvrir le fichier destination...\n");
  62.         exit(0);
  63.       }
  64.  
  65.       if (conv==1)                      /* Amiga -> PC */
  66.       {
  67.         b=getc(fp); 
  68.         while (b!=EOF) {                /* Boucle de lecture-écriture */
  69.         if (a=='á' && (b>='à'|| b=='É')) switch(b) {  
  70.                   case 'é':   
  71.                      b=130;break;
  72.                   case 'à':
  73.                      b=133;break;
  74.                   case 'è':
  75.                      b=138;break;
  76.                   case 'ê':
  77.                      b=136;break;
  78.                   case 'â':
  79.                      b=131;break;
  80.                   case 'ç':
  81.                      b=135;break;
  82.                   case 'î':
  83.                      b=140;break;
  84.                   case 'ô':
  85.                      b=147;break;
  86.                   case 'û':
  87.                      b=150;break;
  88.                   case 'É':
  89.                      b=144;break;
  90.                   case 'ù':
  91.                      b=151;break;
  92.                   case 'ë':
  93.                      b=137;break;
  94.                   case 'ï':
  95.                      b=139;break;
  96.                   case 'ü':
  97.                      b=129;      
  98.                }
  99.                if (lf && b==10)  putc(13,pf); /* LF = CR + LF */
  100.                putc(b,pf);                    /* Ecrit un caractère */
  101.                if (!asc) a = b;               /* Fichier ASCII ou WP? */
  102.                b=getc(fp);                    /* Va en chercher un autre */
  103.           }
  104.       fclose(fp);
  105.       fclose(pf);
  106.       }
  107.       if (conv==2)                            /* PC -> Amiga */
  108.       {
  109.         b=getc(fp);        
  110.         while (b!=EOF) {
  111.             c=(b-64);       /* Décalage de -64 pour les caract. invisibles*/
  112.             if (a == 'á' && c>='@' && c<='W') {
  113.                switch(c) {  
  114.                   case 'B':
  115.                      b=233;break;
  116.                   case 'E':
  117.                      b=224;break;
  118.                   case 'J':
  119.                      b=232;break;
  120.                   case 'H':
  121.                      b=234;break;
  122.                   case 'C':
  123.                      b=226;break;
  124.                   case 'G':
  125.                      b=231;break;
  126.                   case 'L':
  127.                      b=238;break;
  128.                   case 'S':
  129.                      b=244;break;
  130.                   case 'V':
  131.                      b=251;break;
  132.                   case 'P':
  133.                      b=201;break;
  134.                   case 'W':
  135.                      b=249;break;
  136.                   case 'I':
  137.                      b=235;break;
  138.                   case 'K':
  139.                      b=239;break;
  140.                   case 'A':
  141.                      b=252;
  142.                }
  143.             }   
  144.          if (!asc) a = b;                 /* Fichier ASCII ou WP? */
  145.          if (lf && b==13) goto suite;     /* CR + LF = LF */
  146.          putc(b,pf);
  147.        suite:   
  148.          b=getc(fp);
  149.          }
  150.        fclose(fp);
  151.        fclose(pf);
  152.        }
  153. }
  154.